package cn.tedu.review;
/**
 * @Author 金帮嘉诚
 * @Date 2021-06-15 周二 21:17
 */
/*本类用于复习面向对象3*/

/**
 知识点：
 抽象、多态
 */
public class ReviewOOP3 {
    public static void main(String[] args) {
        /*
        * 多态的两个前提：继承和重写
        * 口诀1：父类引用指向子类对象
        * 口诀2：编译看左边运行看右边
        * 多态中重写的方法，方法声明是父类的，方法体是子类的
        * 除此之外，多态中使用的其他资源都是父类的
        * */
        Dog d=new WW();
        d.eat();//未重写的方法
        d.play();
//        Dog Eat~~~~~
//                WW Play,实现抽象父类未实现的方法

    }
}
/*被abstract修饰的类是抽象类，抽象类中的方法可以是：全普通、全抽象或者混合*/
abstract class Dog{
    public void eat(){
        System.out.println("Dog Eat~~~~~");
    };
    public abstract void play();
}
/*继承抽象父类：
* 方案一：自身抽象
* 方案二：实现父类所有抽象方法*/
/*抽象类中可以没有抽象方法，有抽象方法的类必是抽象类
* 如果一个类中方法全是普通方法，那为什么还要声明成抽象类呢？
* 抽象类不可以实例化（创建对象），声明成抽象的是由于不想给外界创建对象*/
class WW extends Dog{
    @Override
    public void play(){
        System.out.println("WW Play,实现抽象父类未实现的方法");
    }

}
